//testbench
`timescale  1ns / 1ps //定义仿真时间精度和单位

module testbench_demo;

parameter PERIOD  = 10;//声明常量

// inputs
reg clk=0;
reg rst_n=0;
reg [3:0] i_data;
reg [3:0] q_data;
reg ready_in=0;
reg [1:0] sel=0;

// outputs
wire [4:0] out_data;
wire ready_out;
//声明输入输出端口位宽和类型
// generate clk
initial  //使用只执行一次的initial块
begin
    forever #(PERIOD/2)  clk=~clk;  //用永久循环forever语句转换clk的电平来模拟时钟信号
end

//generate inputs
initial
begin
    #(PERIOD*2) rst_n = 1;//时延PERIOD*2
    #200                  //时延200赋值
    i_data = 4'd5;
    q_data = 4'ha;
    #100                  //在上面时延200基础上再时延100赋值
    ready_in = 1;
    sel = 2'b10;
end

//例化
demo u_demo(
    .clk(clk),
    .rst_n(rst_n),
    .i_data(i_data),
    .q_data(q_data),
    .ready_in(ready_in),
    .sel(sel),
    .out_data(out_data),
    .ready_out(ready_out)
);
//进行模块例化
endmodule